<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        // 正常情况下,当函数被调用完成后,函数的内部成员会释放掉
        // 闭包的概念:定义在函数内部的函数.
        // 闭包IIFE:使用闭包会使得数据都保存在内存中,使得内存消耗很大,不能滥用闭包.闭包可以读取局部变量
        // 闭包的特点:当函数外部对函数内部的成员有引用的时候,函数的内部成员就不会被释放.会被存储在内存中.
        // 闭包的作用:可以在另一个作用域中调用一个函数的内部函数并访问到该函数作用域中的成员
        function makeFn1 () {
            let msg = 'hello';
        };
        makeFn1();//当makeFn1()函数被调用后,函数的内部成员msg会被释放

        function makeFn2 () {
            let msg = 'hello';
            return function () {//属于函数内部的函数,可以访问makeFn2函数的成员msg  闭包
                console.log(msg);
            }
        };
        makeFn2();// makeFn2()函数被调用之后不会释放成员,因为它里面有闭包.调用闭包可以访问到函数的内部成员msg
    </script>
</body>
</html>